using System;
using System.Data;
using System.Data.SqlClient;
using System.Collections.Generic;
using System.Text;
using Credinka.Ayni.SEA.EN;
namespace Credinka.Ayni.SEA.AD
{
    public class adUsuario : adGeneral
    {

        public adUsuario(SqlConnection con)
        {
            conexion = con;
        }

        public List<enUsuario> fListar(enUsuario poenUsuario)
        {
            List<enUsuario> loenUsuario = null;
            SqlCommand cmd = new SqlCommand("sSEA_ConsultarUsuario", conexion);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add("@piNumeroPagina", SqlDbType.Int).Value = poenUsuario.NumeroPagina;
            cmd.Parameters.Add("@piNumeroRegistros", SqlDbType.Int).Value = poenUsuario.NumeroRegistros;
            cmd.Parameters.Add("@pvNombreCompleto", SqlDbType.VarChar).Value = poenUsuario.NombreCompleto;
            cmd.Parameters.Add("@piCodigoEstadoUsuario", SqlDbType.Int).Value = poenUsuario.CodigoEstadoUsuario;
            SqlDataReader drd = cmd.ExecuteReader();
            if (drd != null)
            {
                int pos_TotalRegistros = drd.GetOrdinal("TotalRegistros");
                int pos_RowNumber = drd.GetOrdinal("RowNumber");
                int pos_IdUsuario = drd.GetOrdinal("iIdUsuario");
                int pos_IdCargo = drd.GetOrdinal("iIdCargo");
                int pos_NombreCompleto = drd.GetOrdinal("vNombreCompleto");
                int pos_NombreUsuario = drd.GetOrdinal("vNombreUsuario");
                int pos_Estado = drd.GetOrdinal("estado");
                int pos_NombrePerfil = drd.GetOrdinal("nombrePerfil"); 
                int pos_CodigoEstadoUsuario = drd.GetOrdinal("iCodigoEstadoUsuario");
              
                loenUsuario = new List<enUsuario>();
                enUsuario oenUsuario;
                while (drd.Read())
                {
                    oenUsuario = new enUsuario();
                    enPerfil oenPerfil = new enPerfil();
                    oenUsuario.entPerfil = new List<enPerfil>();
                    oenUsuario.TotalRegistros = drd.GetInt32(pos_TotalRegistros);
                    oenUsuario.RowNumber = drd.GetInt32(pos_RowNumber);
                    oenUsuario.IdUsuario = drd.GetInt32(pos_IdUsuario);
                    oenUsuario.IdCargo = (drd.IsDBNull(pos_IdCargo) ? 0 : drd.GetInt32(pos_IdCargo));
                    oenUsuario.NombreCompleto = (drd.IsDBNull(pos_NombreCompleto) ? "" : drd.GetString(pos_NombreCompleto));
                    oenUsuario.NombreUsuario = (drd.IsDBNull(pos_NombreUsuario) ? "" : drd.GetString(pos_NombreUsuario));
                    oenUsuario.estado = (drd.IsDBNull(pos_Estado) ? "" : drd.GetString(pos_Estado));
                    oenPerfil.Nombre = (drd.IsDBNull(pos_NombrePerfil) ? "" : drd.GetString(pos_NombrePerfil));
                    oenUsuario.CodigoEstadoUsuario = drd.GetInt32(pos_CodigoEstadoUsuario);
                    oenUsuario.entPerfil.Add(oenPerfil);
                    loenUsuario.Add(oenUsuario);
                }
            }
            return (loenUsuario);
        }

        public List<enUsuario> fListarUsuario()
        {
            List<enUsuario> loenUsuario = null;
            SqlCommand cmd = new SqlCommand("sSEA_ListarUsuario", conexion);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlDataReader drd = cmd.ExecuteReader();
            if (drd != null)
            {
                int pos_IdUsuario = drd.GetOrdinal("iIdUsuario");
                int pos_IdCargo = drd.GetOrdinal("iIdCargo");
                int pos_NombreCompleto = drd.GetOrdinal("vNombreCompleto");
                int pos_NombreUsuario = drd.GetOrdinal("vNombreUsuario");
                int pos_CodigoEstadoUsuario = drd.GetOrdinal("iCodigoEstadoUsuario");
                loenUsuario = new List<enUsuario>();
                enUsuario oenUsuario;
                while (drd.Read())
                {
                    oenUsuario = new enUsuario();
                    oenUsuario.IdUsuario = drd.GetInt32(pos_IdUsuario);
                    oenUsuario.IdCargo = (drd.IsDBNull(pos_IdCargo) ? 0 : drd.GetInt32(pos_IdCargo));
                    oenUsuario.NombreCompleto = (drd.IsDBNull(pos_NombreCompleto) ? "" : drd.GetString(pos_NombreCompleto));
                    oenUsuario.NombreUsuario = (drd.IsDBNull(pos_NombreUsuario) ? "" : drd.GetString(pos_NombreUsuario));
                    oenUsuario.CodigoEstadoUsuario = drd.GetInt32(pos_CodigoEstadoUsuario);
                    loenUsuario.Add(oenUsuario);
                }
            }
            return (loenUsuario);
        }

        public enUsuario fObtenerUsuario(enUsuario poenUsuario)
        {
            SqlCommand cmd = new SqlCommand("sSEA_ObtenerUsuario", conexion);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add("@pvNombreUsuario", SqlDbType.VarChar).Value = poenUsuario.NombreUsuario;

            enUsuario oenUsuario = new enUsuario();
            oenUsuario.entDescripcion = new enDescripcion();
            oenUsuario.entPerfil = new List<enPerfil>();

            SqlDataReader drd = cmd.ExecuteReader();
            if (drd != null)
            {
                int pos_IdUsuario = drd.GetOrdinal("iIdUsuario");
                int pos_IdCargo = drd.GetOrdinal("iIdCargo");
                int pos_NombreCompleto = drd.GetOrdinal("vNombreCompleto");
                int pos_NombreUsuario = drd.GetOrdinal("vNombreUsuario");
                int pos_CodigoEstadoUsuario = drd.GetOrdinal("iCodigoEstadoUsuario");
                int pos_IdPerfil = drd.GetOrdinal("iIdPerfil");
                int pos_NombrePerfil = drd.GetOrdinal("nombrePerfil");
                int pos_NombreCargo = drd.GetOrdinal("nombreCargo");
           
                while (drd.Read())
                {
                    enPerfil oenPerfil = new enPerfil();
                    enOficina oenOficina = new enOficina();
                    oenUsuario.IdUsuario = drd.GetInt32(pos_IdUsuario);
                    oenUsuario.IdCargo = (drd.IsDBNull(pos_IdCargo) ? 0 : drd.GetInt32(pos_IdCargo));
                    oenUsuario.NombreCompleto = (drd.IsDBNull(pos_NombreCompleto) ? "" : drd.GetString(pos_NombreCompleto));
                    oenUsuario.NombreUsuario = (drd.IsDBNull(pos_NombreUsuario) ? "" : drd.GetString(pos_NombreUsuario));
                    oenUsuario.CodigoEstadoUsuario = drd.GetInt32(pos_CodigoEstadoUsuario);
                    oenPerfil.IdPerfil = (drd.IsDBNull(pos_IdPerfil) ? 0 : drd.GetInt32(pos_IdPerfil));
                    oenPerfil.Nombre = (drd.IsDBNull(pos_NombrePerfil) ? "" : drd.GetString(pos_NombrePerfil));
                    oenUsuario.entDescripcion.Descripcion = (drd.IsDBNull(pos_NombreCargo) ? "" : drd.GetString(pos_NombreCargo));
                    oenUsuario.entPerfil.Add(oenPerfil);
                }
            }
            return oenUsuario;
        }

        public enUsuario fObtenerUsuarioPorId(int poIdUsuario)
        {
            SqlCommand cmd = new SqlCommand("sSEA_ObtenerUsuarioPorId", conexion);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add("@pvIdUsuario", SqlDbType.VarChar).Value = poIdUsuario;

            enUsuario oenUsuario = new enUsuario();
            oenUsuario.entPerfil = new List<enPerfil>();

            SqlDataReader drd = cmd.ExecuteReader();
            if (drd != null)
            {
                int pos_IdUsuario = drd.GetOrdinal("iIdUsuario");
                int pos_IdCargo = drd.GetOrdinal("iIdCargo");
                int pos_NombreCompleto = drd.GetOrdinal("vNombreCompleto");
                int pos_NombreUsuario = drd.GetOrdinal("vNombreUsuario");
                int pos_CodigoEstadoUsuario = drd.GetOrdinal("iCodigoEstadoUsuario");
                int pos_IdPerfil = drd.GetOrdinal("iIdPerfil");
                int pos_NombrePerfil = drd.GetOrdinal("nombrePerfil");

                while (drd.Read())
                {
                    enPerfil oenPerfil = new enPerfil();
                    enFormulario oenMenu = new enFormulario();
                    oenUsuario.IdUsuario = drd.GetInt32(pos_IdUsuario);
                    oenUsuario.IdCargo = (drd.IsDBNull(pos_IdCargo) ? 0 : drd.GetInt32(pos_IdCargo));
                    oenUsuario.NombreCompleto = (drd.IsDBNull(pos_NombreCompleto) ? "" : drd.GetString(pos_NombreCompleto));
                    oenUsuario.NombreUsuario = (drd.IsDBNull(pos_NombreUsuario) ? "" : drd.GetString(pos_NombreUsuario));
                    oenUsuario.CodigoEstadoUsuario = drd.GetInt32(pos_CodigoEstadoUsuario);
                    oenPerfil.IdPerfil = (drd.IsDBNull(pos_IdPerfil) ? 0 : drd.GetInt32(pos_IdPerfil));
                    oenPerfil.Nombre = (drd.IsDBNull(pos_NombrePerfil) ? "" : drd.GetString(pos_NombrePerfil));
                    oenUsuario.entPerfil.Add(oenPerfil);
                }
            }
            return oenUsuario;
        }

        public int fRegistrar(enUsuario poenUsuario)
        {
            int N = -1;
            SqlCommand cmd = new SqlCommand("sSEA_RegistrarUsuario", conexion);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add("@piiIdCargo", SqlDbType.Int).Value = poenUsuario.IdCargo;
            cmd.Parameters.Add("@pivNombreCompleto", SqlDbType.VarChar).Value = poenUsuario.NombreCompleto;
            cmd.Parameters.Add("@pivNombreUsuario", SqlDbType.VarChar).Value = poenUsuario.NombreUsuario;
            cmd.Parameters.Add("@piCodigoEstado", SqlDbType.Int).Value = poenUsuario.CodigoEstadoUsuario;
            N = Convert.ToInt32(cmd.ExecuteScalar());
            
            return N;
        }

        public int fModificar(enUsuario poenUsuario)
        {
            int N = -1;
            SqlCommand cmd = new SqlCommand("sSEA_ModificarUsuario", conexion);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add("@piiIdUsuario", SqlDbType.Int).Value = poenUsuario.IdUsuario;
            cmd.Parameters.Add("@piiIdCargo", SqlDbType.Int).Value = poenUsuario.IdCargo;
            cmd.Parameters.Add("@pivNombreCompleto", SqlDbType.VarChar).Value = poenUsuario.NombreCompleto;
            cmd.Parameters.Add("@pivNombreUsuario", SqlDbType.VarChar).Value = poenUsuario.NombreUsuario;
            cmd.Parameters.Add("@pidtFechaInicio", SqlDbType.DateTime).Value = poenUsuario.FechaInicio;
            cmd.Parameters.Add("@pidtFechaFin", SqlDbType.DateTime).Value = poenUsuario.FechaFin;
            cmd.Parameters.Add("@piiCodigoEstadoUsuario", SqlDbType.Int).Value = poenUsuario.CodigoEstadoUsuario;
            cmd.Parameters.Add("@pivAudNombreUsuarioModificacion", SqlDbType.VarChar).Value = poenUsuario.AudNombreUsuarioModificacion;
            cmd.Parameters.Add("@pivAudIPModificacion", SqlDbType.DateTime).Value = poenUsuario.udIPModificacion;
            cmd.Parameters.Add("@pivAudMacModificacion", SqlDbType.VarChar).Value = poenUsuario.AudMacModificacion;
            N = cmd.ExecuteNonQuery();
            return (N);
        }

        public int fContar()
        {
            int totalUsuario;
            SqlCommand cmd = new SqlCommand("sSEA_ContarUsuario", conexion);
            cmd.CommandType = CommandType.StoredProcedure;
            totalUsuario = (int)cmd.ExecuteScalar();
            return (totalUsuario);
        }
    }
}
